package zhihuilan.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5EncryptionUtils {
//    // 方法：将字符串转换为MD5加密后的32位十六进制数
//    public static String md5Encrypt(String str) {
//        try {
//            // 获取MD5摘要算法的 MessageDigest 实例
//            MessageDigest md = MessageDigest.getInstance("MD5");
//            // 将字符串转换为字节数组，并更新摘要
//            md.update(str.getBytes());
//            // 计算哈希值，并转换为字节数组
//            byte[] digest = md.digest();
//            // 创建一个StringBuilder对象，用于拼接十六进制数
//            StringBuilder sb = new StringBuilder();
//            // 遍历字节数组，将每个字节转换为两位十六进制数并拼接到StringBuilder中
//            for (byte b : digest) {
//                sb.append(String.format("%02x", b));
//            }
//            // 返回拼接后的十六进制字符串
//            return sb.toString();
//        } catch (NoSuchAlgorithmException e) {
//            // 如果找不到MD5算法，则抛出运行时异常
//            throw new RuntimeException("MD5 algorithm not found", e);
//        }
//    }

    public static String md5Encrypt(String input) {
        try {
            // 获取 MD5 MessageDigest 实例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 将字符串转换为 UTF-8 字节数组并计算哈希值
            byte[] hashBytes = md.digest(input.getBytes(java.nio.charset.StandardCharsets.UTF_8));

            // 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : hashBytes) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0'); // 补零处理
                }
                hexString.append(hex);
            }

            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            // 理论上不会发生，因为 MD5 是标准算法
            throw new RuntimeException("MD5 algorithm not found", e);
        }

    }
    /**
     * 适配HPH   md5加密方法，使用utf8编码方式编码输出；
     *
     * @param input 参数加密字符串；默认加密字符串是在用户传入参数的同时，添加系统平台自带的加密串；
     * @return 返回加密之后的字符串；
     */
    public static String md5(String input) {
        return md5Encrypt(md5Encrypt(input + "yourkey"));
    }
}
